package xyz.zhno.project.commons.core.exception;

import lombok.Getter;

/**
 * 自定义异常错误码枚举类
 * 格式: 标识字母 + 4 位数字
 * A: 客户端错误
 * B: 服务端错误
 * C: 中间件、三方接口错误
 * D: 数据库错误
 * @author zh_o
 * @date 2020-10-31
 */
@Getter
public enum ProjectExceptionCodeEnum {


    /**
     * 用户端一级宏观错误
     */
    USER_ERROR("A0001", "用户端错误"),

    /**
     * 注册错误
     */
    USER_REGISTER_ERROR("A0100", "用户注册异常"),

    USER_EXISTED("A0101", "用户已存在"),

    USER_CHECK_CODE_ERROR("A0102","校验码错误"),

    USER_MESSAGE_CODE_ERROR("A0103", "短信验证码错误"),

    /**
     * 登录错误
     */
    USER_LOGIN_ERROR("A2001", "用户登录错误"),

    USER_NOT_EXISTS("A2002", "用户不存在"),

    USER_PASSWORD_ERROR("A2003", "用户密码错误"),

    USER_AUTHENTICATION_FAILED("A2004", "用户身份认证失败"),

    /**
     * 权限错误
     */
    PERMISSION_ACCESS_ERROR("A3000", "用户访问权限异常"),

    PERMISSION_INSUFFICIENT("A3001", "用户权限不足"),

    TOKEN_INVALID("A3002", "令牌无效"),

    /**
     * 参数错误
     */
    PARAMETER_VALIDATION_ERROR("A4000", "参数错误"),

    /**
     * 支付错误
     */
    MONEY_BY_ZERO("A4001", "金额为零"),

    MONEY_IS_NEGATIVE("A4002", "金额为负数"),

    PAYMENT_TIMEOUT("A4003", "支付超时"),

    BALANCE_SHORTFALL("A4004", "余额不足"),

    /**
     * 系统一级宏观错误
     */
    SYS_ERROR("B0001", "服务器异常"),

    SYS_RESOURCE_NOT_FOUND("B1001", "系统资源异常"),

    /**
     * 中间件、接口调用错误
     */
    MESSAGE_ERROR("C1000", "消息服务异常"),

    MESSAGE_SEND_TIMEOUT("C1001", "消息发送超时"),

    JSON_ERROR("C1002", "JSON 解析错误"),

    SERVER_TIMOUT("C1003", "服务请求超时"),

    /**
     * 请求限流
     */
    REQUEST_BLOCK("C1003", "请求限流"),

    /**
     * 数据库错误
     */
    DB_ERROR("D1000", "数据服务错误"),

    DB_TIMEOUT("D1001", "数据请求超时");


    /**
     * 错误码
     */
    private String code;

    /**
     * 错误描述信息
     */
    private String message;

    ProjectExceptionCodeEnum(String code, String message) {
        this.code = code;
        this.message = message;
    }
}
